package likou.tanxin;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * @author: Tangxz
 * @email: 1171702529@qq.com
 * @cate: 2020/11/07 00:13
 */
public class _870 {
    public static void main(String[] args) {
        System.out.println(advantageCount(new int[]{12, 24, 8, 32}, new int[]{13, 25, 32, 11}));
    }

    public static int[] advantageCount(int[] A, int[] B) {
        int n = A.length;
        int[] C = new int[n];
        boolean[] f = new boolean[n];
        Arrays.sort(A);
        //s记录，如果没有比当前更大的，就从0开始往后找，找第一个没用过的最小的元素
        int s = 0;
        for (int i = 0; i < n; i++) {
            //-rs-1 为当前找到的比它大的第一个数的下标
            int rs = Arrays.binarySearch(A, B[i]);
            if (rs >= 0) {
                do {
                    rs++;
                } while (rs < n && A[rs] == B[i]);
            } else {
                rs = -rs - 1;
            }
            //如果当前A[rs]中的数已被用，则rs++，并且rs<n
            while (rs < n && f[rs]) {
                rs++;
            }
            //
            if (rs == n || rs == s) {
                rs = s;
                do {
                    s++;
                } while (s < n && f[s]);
            }
            C[i] = A[rs];
            f[rs] = true;
        }
        return C;
    }
}
